package 富婆梦.第一阶段.Java基础视频学习.线程的练习.作业5;

import java.util.Random;

/**
 * @ProjectName: java-learning
 * @Package: 富婆梦.第一阶段.线程的练习.作业五
 * @ClassName: Lottery
 * @Author: hemengjin
 * @Description: 某公司组织年会, 会议入场时有两个入口, 在入场时每位员工都能获取一张双色球彩票, 假设公司有100个员工, 利用多线程模拟年会入场过程,
 * 并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下：
 * 编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
 * 编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
 * //.....
 * 从后门入场的员工总共: 13 位员工
 * 从前门入场的员工总共: 87 位员工
 * <p>
 * 方法：
 * 生成彩票（）
 * 入场（）
 * @Date:2021/11/3 20:22
 * @Version: 1.0
 */
public class Lottery implements Runnable {
    //从前门后门进去的员工数量
    int be_count = 0;
    int af_count = 0;
    //员工总数
    int staff_count = 0;
    Object object = new Object();

    //生成彩票号码的方法
    private String creatLottery() {
        int[] lot = new int[7];
        for (int i = 0; i < lot.length; i++) {
            lot[i] = new Random().nextInt(50);
        }
        String s = "";
        for (int i = 0; i < lot.length; i++) {
            if (i == 0) {
                s = s + lot[i];
            } else {
                s = s + "," + lot[i];
            }
        }
        return "[" + s + "]";
    }

    //入场方法，传入员工对象，员工从前后门随机入场
    private int admission(Staff staff) {
        Random random = new Random();
        int door = random.nextInt(2);
        if (door == 0) {
            be_count++;
        } else {
            af_count++;
        }
        staff_count++;
        return door;
    }

    @Override
    public void run() {
        synchronized (object) {
            while (staff_count < 100) {
                //创建一个员工，员工的名字就是当前员工数量
                Staff staff = new Staff(String.valueOf(staff_count + 1));
                String lot = creatLottery();
                int door = admission(staff);
                if (door == 0) {
                    System.out.println("员工" + staff.name + ":从前门入场！拿到的双色球号码是" + lot);
                } else {
                    System.out.println("员工" + staff.name + ":从后门入场！拿到的双色球号码是" + lot);
                }
            }
        }
        System.out.println("从前门入场的员工总共: " + be_count + "位员工");
        System.out.println("从后门入场的员工总共: " + af_count + "位员工");
        System.out.println("员工总共: " + staff_count + "位");
    }

    public static void main(String[] args) {
        Lottery lot = new Lottery();
        Thread t1 = new Thread(lot);
        Thread t2 = new Thread(lot);
        t1.start();
        t2.start();
    }
}
